/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package kernel;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author corentinjezequel
 */
class Damage {
     int ID;
     String kundenid;
     String datum;
     String beschreibung;
     String status;
     String ersteller;

     public Damage(int NID,String Kid,String D,String B, String St, String E){
       ID=NID;kundenid=Kid;datum=D;beschreibung=B;status=St;ersteller=E;
     }
}
class Auto {
     int ID;
     String kennzeichen;
     String fahrzeugklasse;
     String hersteller;
     String modell;
     int sitzplatze;
     int kilometerstand;
     String erstzulassung;
     String kraftstofftyp;
     String status;
     float faktor;

     public Auto(int NID,String KZ,String FK,String HS, String Mod,int SP,int Km, String EZL,String KT, String Sta, Float Fak){
       ID=NID;kennzeichen=KZ;fahrzeugklasse=FK;hersteller=HS;modell=Mod;sitzplatze=SP;kilometerstand=Km;erstzulassung=EZL;kraftstofftyp=KT;status=Sta;faktor=Fak;
    }
}
public class Car {


    
    private int ID;
    private String kennzeichen;
    private String fahrzeugklasse;
    private String hersteller;
    private String modell;
    private int sitzplatze;
    private int kilometerstand;
    private String erstzulassung;
    private String kraftstofftyp;
    private String status;
    private float faktor;

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public String getErstzulassung() {
        return erstzulassung;
    }

    public void setErstzulassung(String erstzulassung) {
        this.erstzulassung = erstzulassung;
    }

    public String getFahrzeugklasse() {
        return fahrzeugklasse;
    }

    public void setFahrzeugklasse(String fahrzeugklasse) {
        this.fahrzeugklasse = fahrzeugklasse;
    }

    public float getFaktor() {
        return faktor;
    }

    public void setFaktor(float faktor) {
        this.faktor = faktor;
    }

    public String getHersteller() {
        return hersteller;
    }

    public void setHersteller(String hersteller) {
        this.hersteller = hersteller;
    }

    public String getKennzeichen() {
        return kennzeichen;
    }

    public void setKennzeichen(String kennzeichen) {
        this.kennzeichen = kennzeichen;
    }

    public int getKilometerstand() {
        return kilometerstand;
    }

    public void setKilometerstand(int kilometerstand) {
        this.kilometerstand = kilometerstand;
    }

    public String getKraftstofftyp() {
        return kraftstofftyp;
    }

    public void setKraftstofftyp(String kraftstofftyp) {
        this.kraftstofftyp = kraftstofftyp;
    }

    public String getModell() {
        return modell;
    }

    public void setModell(String modell) {
        this.modell = modell;
    }

    public int getSitzplatze() {
        return sitzplatze;
    }

    public void setSitzplatze(int sitzplatze) {
        this.sitzplatze = sitzplatze;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
    
    
    
public static String newDamage(String ID,String fahrzeugid, String verursacherid,String date,String status,String beschreibung) throws ParseException{
         String masklayout = "yyyy-MM-dd";
        String maskdb = "dd.MM.yyyy";
        SimpleDateFormat formatter = new SimpleDateFormat(maskdb);
        SimpleDateFormat formatterDisplay = new SimpleDateFormat(masklayout);
        Date auxDate = new Date();


        Connection conn = null; //initialisation de la connexion
        try {
            conn=kernel.ConnectDB.ConnectDB();

            CallableStatement stmt = conn.prepareCall("call CREATE_DAMAGE(?,?,?,?,?,?,?,?)");
            //  set the in param
            stmt.setString(1,ID);
            stmt.setString(2, fahrzeugid.replace("'","''"));

            stmt.setString(3, verursacherid.replace("'","''"));
            auxDate = formatter.parse(date);
            stmt.setString(4,formatterDisplay.format(auxDate));
            stmt.setString(5, beschreibung.replace("'","''"));
            stmt.setString(6, status.replace("'","''"));

            //set the out param
            int Integer=0;
          stmt.registerOutParameter(7, 8);


            ResultSet rs = stmt.executeQuery();
            String result=stmt.getString(7);
            int error=stmt.getInt(8);
            System.out.println("Vous etes déconnecté mon general");
            if(error==1){return ("1");}
            System.out.println(error+"toto"+result);
            return(result);

        } catch (SQLException e) {
            e.printStackTrace();
            return(null);
       }
}
public static String updateCar(String ID,String id,String kennzeichen, String fahrzeugklasse,String hersteller,String modell,String sitzplatze,String kilometerstand,String erstzulassung,String aufnehmdatum,String kraftstofftyp,String status,String faktor) throws ParseException{
            String masklayout = "yyyy-MM-dd";
        String maskdb = "dd.MM.yyyy";
        SimpleDateFormat formatter = new SimpleDateFormat(maskdb);
        SimpleDateFormat formatterDisplay = new SimpleDateFormat(masklayout);
        Date auxDate = new Date();

    Connection conn = null; //initialisation de la connexion
        try {
            conn=kernel.ConnectDB.ConnectDB();
            System.out.println("Aqui o tipo é "+kraftstofftyp);
            CallableStatement stmt = conn.prepareCall("call UPDATE_CAR(?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            //  set the in param
            stmt.setString(1,ID);
            stmt.setString(2, id);
            stmt.setString(3, kennzeichen.replace("'","''"));
            stmt.setString(4, fahrzeugklasse.replace("'","''"));
            stmt.setString(5, hersteller.replace("'","''"));
            stmt.setString(6, modell.replace("'","''"));
            stmt.setString(7, sitzplatze.replace("'","''"));
            stmt.setString(8, kilometerstand.replace("'","''"));
            auxDate = formatter.parse(erstzulassung);
            stmt.setString(9,formatterDisplay.format(auxDate));
            stmt.setString(10, kraftstofftyp.replace("'","''"));
            stmt.setString(11, status.replace("'","''"));
            stmt.setString(12, faktor.replace("'","''"));

            //set the out param
            int Integer=0;
          stmt.registerOutParameter(13, 14);


            ResultSet rs = stmt.executeQuery();
            String result=stmt.getString(13);
            int error=stmt.getInt(14);
            System.out.println("Vous etes déconnecté mon general");
            if(error==1){return ("1");}
             return(result);

        } catch (SQLException e) {
            e.printStackTrace();
            return(null);
       }
}
public static String newCar(String ID,String kennzeichen, String fahrzeugklasse,String hersteller,String modell,String sitzplatze,String kilometerstand,String erstzulassung,String kraftstofftyp,String status,String faktor) throws ParseException{
                String masklayout = "yyyy-MM-dd";
        String maskdb = "dd.MM.yyyy";
        SimpleDateFormat formatter = new SimpleDateFormat(maskdb);
        SimpleDateFormat formatterDisplay = new SimpleDateFormat(masklayout);
        Date auxDate = new Date();

    Connection conn = null; //initialisation de la connexion
        try {
            conn=kernel.ConnectDB.ConnectDB();

            CallableStatement stmt = conn.prepareCall("call CREATE_CAR(?,?,?,?,?,?,?,?,?,?,?,?,?)");
            //  set the in param
            stmt.setString(1,ID);
            stmt.setString(2, kennzeichen.replace("'","''"));
            stmt.setString(3, fahrzeugklasse.replace("'","''"));
            stmt.setString(4, hersteller.replace("'","''"));
            stmt.setString(5, modell.replace("'","''"));
            stmt.setString(6, sitzplatze.replace("'","''"));
            stmt.setString(7, kilometerstand.replace("'","''"));
            auxDate = formatter.parse(erstzulassung);
            stmt.setString(8,formatterDisplay.format(auxDate));
            stmt.setString(9, kraftstofftyp.replace("'","''"));
            stmt.setString(10, status.replace("'","''"));
            stmt.setString(11, faktor.replace("'","''"));

            //set the out param
            int Integer=0;
          stmt.registerOutParameter(12, 13);


            ResultSet rs = stmt.executeQuery();
            String result=stmt.getString(12);
            int error=stmt.getInt(13);
            System.out.println("Vous etes déconnecté mon general");
            if(error==1){return ("1");}
            if(error==4){return("4");}
            return(result);

        } catch (SQLException e) {
            e.printStackTrace();
            return(null);
       }
}
public static String[][] searchcar(String arg1, String arg2) throws ParseException{
        Connection conn = null; //initialisation de la connexion
        
        String masklayout = "dd.MM.yyyy";
        String maskdb = "yyyy-MM-dd";
        SimpleDateFormat formatter = new SimpleDateFormat(maskdb);
        SimpleDateFormat formatterDisplay = new SimpleDateFormat(masklayout);
        Date auxDate = new Date();
        
        ArrayList <Auto> vroum;
        String CarList[][] = null;
        try {
            conn=kernel.ConnectDB.ConnectDB();

            CallableStatement stmt;
            stmt=conn.prepareCall("call SEARCH_CAR(?,?)");

            stmt.setString(1,arg1);
            stmt.setString(2, arg2.replace("'","''"));
            ResultSet rs = stmt.executeQuery();
            //set the out param
            int Integer=0;

int i=0;
            vroum = new ArrayList <Auto>();
            while (rs.next( )){
                vroum.add(new Auto(rs.getInt("fahrzeugid"),rs.getString("kennzeichen"),rs.getString("fahrzeugklasse"),rs.getString("hersteller"),rs.getString("modell"),rs.getInt("sitzplaetze"),rs.getInt("kilometerstand"),rs.getDate("erstzulassung").toString(),rs.getString("kraftstofftyp"),rs.getString("status"),rs.getFloat("preisfaktor")));
                i++;
            }
            //puis dans un tableau
            int nbLignes = i;
            CarList = new String [nbLignes][12];
            for(i=0;i<nbLignes;i++){
                Auto b = vroum.get(i);
                CarList[i][0]=String.valueOf(b.ID);
                CarList[i][4]=b.kennzeichen;
                CarList[i][1]=b.fahrzeugklasse;
                CarList[i][2]=b.hersteller           ;
                CarList[i][3]=b.modell;
                CarList[i][6]=String.valueOf(b.sitzplatze);
                CarList[i][7]=String.valueOf(b.kilometerstand);
                auxDate = formatter.parse(b.erstzulassung);
                CarList[i][8]=formatterDisplay.format(auxDate);
                CarList[i][9]=b.kraftstofftyp;
                CarList[i][5]=numberToStatus(b.status);
                CarList[i][10]=Float.toString(b.faktor);

            }
            System.out.println("Vous etes déconnecté mon general");

            return(CarList);


        } catch (SQLException e) {
            e.printStackTrace();
            return(null);
       }

}
    public static String[][] searchdamage(String sessionID, String arg1) throws ParseException {
Connection conn = null; //initialisation de la connexion
        String masklayout = "dd.MM.yyyy";
        String maskdb = "yyyy-MM-dd";
        SimpleDateFormat formatter = new SimpleDateFormat(maskdb);
        SimpleDateFormat formatterDisplay = new SimpleDateFormat(masklayout);
        Date auxDate = new Date();

        ArrayList <Damage> schade;
        String DamageList[][] = null;
        try {
            conn=kernel.ConnectDB.ConnectDB();

            CallableStatement stmt;
            stmt=conn.prepareCall("call SEARCH_DAMAGE(?,?)");

            stmt.setString(1,sessionID);
            stmt.setString(2, arg1.replace("'","''"));

            ResultSet rs = stmt.executeQuery();


            //set the out param
            int Integer=0;


            int i=0;
            schade = new ArrayList <Damage>();
            if(rs!=null){
            while (rs.next( )){
                schade.add(new Damage(rs.getInt("schadenid"),rs.getString("kundenID"),rs.getString("datum"),rs.getString("beschreibung"),rs.getString("status"),rs.getString("ersteller")));
                i++;
            }
            //puis dans un tableau
            int nbLignes = i;
            DamageList = new String [nbLignes][12];
            for(i=0;i<nbLignes;i++){
                Damage b = schade.get(i);
                DamageList[i][0]=String.valueOf(b.ID);
                DamageList[i][1]=b.kundenid;
                auxDate = formatter.parse(b.datum);
                DamageList[i][2]=formatterDisplay.format(auxDate);
                DamageList[i][3]=b.beschreibung           ;
                DamageList[i][4]=b.status;
                DamageList[i][5]=b.ersteller;

            }
            System.out.println("Vous etes déconnecté mon general");

            return(DamageList);
            }
            return(null);
        } catch (SQLException e) {
            e.printStackTrace();
            return(null);
    }
    }
public static String[][] searchcarbyid(String arg1, String arg2){
        Connection conn = null; //initialisation de la connexion

        ArrayList <Auto> vroum;
        String CarList[][] = null;
        try {
            conn=kernel.ConnectDB.ConnectDB();

            CallableStatement stmt;
            stmt=conn.prepareCall("call SEARCH_CAR_BY_ID(?,?,?)");

            stmt.setString(1,arg1);
            stmt.setString(2, arg2.replace("'","''"));
                      stmt.registerOutParameter(3, 3);


            ResultSet rs = stmt.executeQuery();

            int error=stmt.getInt(3);
           
            //set the out param
            int Integer=0;
            System.out.println(error);
            if(error==0){
            int i=0;
            vroum = new ArrayList <Auto>();
            if(rs!=null){
            while (rs.next( )){
                vroum.add(new Auto(rs.getInt("fahrzeugid"),rs.getString("kennzeichen"),rs.getString("fahrzeugklasse"),rs.getString("hersteller"),rs.getString("modell"),rs.getInt("sitzplaetze"),rs.getInt("kilometerstand"),rs.getDate("erstzulassung").toString(),rs.getString("kraftstofftyp"),rs.getString("status"),rs.getFloat("preisfaktor")));
                i++;
            }
            //puis dans un tableau
            int nbLignes = i;
            CarList = new String [nbLignes][12];
            for(i=0;i<nbLignes;i++){
                Auto b = vroum.get(i);
                CarList[i][0]=String.valueOf(b.ID);
                CarList[i][4]=b.kennzeichen;
                CarList[i][1]=b.fahrzeugklasse;
                CarList[i][2]=b.hersteller           ;
                CarList[i][3]=b.modell;
                CarList[i][6]=String.valueOf(b.sitzplatze);
                CarList[i][7]=String.valueOf(b.kilometerstand);
                CarList[i][8]=b.erstzulassung;
                CarList[i][9]=b.kraftstofftyp;
                CarList[i][5]=b.status;
                CarList[i][10]=Float.toString(b.faktor);

            }
            System.out.println("Vous etes déconnecté mon general");

            return(CarList);
            }
            }return(null);
        } catch (SQLException e) {
            e.printStackTrace();
            return(null);
       }

}


public static String statusToNumber(String status){
    String statusnumber="1";
    if(status.equalsIgnoreCase("Verfügbar")) statusnumber="1";
    else if(status.equalsIgnoreCase("Verleihen")) statusnumber="2";
    else if(status.equalsIgnoreCase("Reparatur")) statusnumber="3";
    else statusnumber="4";
    return statusnumber;
}

public static String numberToStatus(String statusnumber){
    String status = new String();
    if(statusnumber.equalsIgnoreCase("1")) statusnumber="Verfügbar";
    else if(statusnumber.equalsIgnoreCase("2")) statusnumber="Verleihen";
    else if(statusnumber.equalsIgnoreCase("3")) statusnumber="Reparatur";
    else statusnumber="Nicht Verleihbar";
    return statusnumber;
}

}
